package com.ruoyi.memoryleak;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/oom/1")
public class OOMController {

    // 一个静态的Map，用于模拟“缓存”，它是GC Root的一部分，永远不会被回收
    private static final Map<String, Object> LEAK_MAP = new HashMap<>();

    // 一个会被调用的接口，例如通过 http://localhost:8080/oom?size=100
    @GetMapping("/oom")
    public String causeOOM(@RequestParam int size) {
        // 每次调用这个接口，都会向Map中添加一个大的数据块
        byte[] payload = new byte[size * 1024 * 1024]; // 分配 size MB 的内存
        LEAK_MAP.put(UUID.randomUUID().toString(), payload);
        return "Added " + size + " MB to the leaky map. Current size: " + LEAK_MAP.size() + " entries.";
    }
}
